package org.yeruyi.common.adapter;

import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import org.yeruyi.common.ui.viewholder.RoyBaseViewHolder;

import java.util.ArrayList;
import java.util.List;


/**
 * Author：yeruyi
 * Date：2017/3/12
 * Version：v1.0
 * Note:
 * <p>
 * 2017年05月22日 增加viewHolder
 */

public abstract class ListViewAdapter<T> extends BaseAdapter {

    private static final String TAG = "[ListViewAdapter]";

    private List<T> mData;

    public ListViewAdapter(List<T> data) {
        if (data == null) {
            data = new ArrayList<T>();
        }
        this.mData = data;
    }

    /**
     * 判断数据是或否存在
     *
     * @param waittingRecordData 等待记录的数据
     * @return true存在 false不存在
     */
    public boolean isExist(T waittingRecordData) {
        return mData.contains(waittingRecordData);
    }

    /**
     * 刷新数据更新，全量更新
     *
     * @param data 数据
     */
    public void updateData(List<T> data) {
        this.mData = data;
        notifyDataSetChanged();
    }

    /**
     * 根据提供对象清空列表
     *
     * @param data 待清除对象
     * @return true清除成功或者本身没有该对象 false 清除失败
     */
    public boolean clearDataByEntity(T data) {
        if (mData.contains(data)) {
            try {
                mData.remove(mData.indexOf(data));
                notifyDataSetChanged();
                return true;
            } catch (Exception e) {
                return false;
            }
        } else {
            return true;
        }
    }

    /**
     * 清空数据
     */
    public void clearData() {
        this.mData.clear();
        notifyDataSetChanged();
    }

    /**
     * 获取数据信息
     *
     * @return
     */
    public List<T> getdata() {
        return mData;
    }

    /**
     * 追加信息
     *
     * @param data 追加数据
     */
    public void appendData(T data) {
        if (!isExist(data)) {
            this.mData.add(data);
        }
        notifyDataSetChanged();
    }

    /**
     * 强制实现holder对象
     *
     * @param position    位置
     * @param convertView view
     * @param parent      viewGroup
     * @return
     */
    public abstract RoyBaseViewHolder<T> getHolder(int position, View convertView, ViewGroup parent);

    @Override
    public int getCount() {
        return mData != null ? mData.size() : 0;
    }

    @Override
    public T getItem(int position) {
        return mData != null ? mData.get(position) : null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        RoyBaseViewHolder royBaseViewHolder;
        // 这里存在严重问题，需要整改
//        if (convertView == null) {
        royBaseViewHolder = getHolder(position, convertView, parent);
//            convertView.setTag(royBaseViewHolder.getRootView());
//        } else {
//            royBaseViewHolder = (RoyBaseViewHolder) convertView.getTag();
//        }
        royBaseViewHolder.setData(getItem(position));
        return royBaseViewHolder.getRootView();
    }

}
